Решено, использовал перевод в Jass отсюда xgm.guru/p/wc3/dooandw3etojass, но там в базу пишутся радианы. PS: затея использовать динамический ланд пока жива
Всем спасибо, проблему решил за счет проверки на цвет/номер игрока как индекс в массиве переменных. Все работает как запланировано.
Вопрос вдогонку: как можно задавать сам индекс переменной-массива?)
З.Ы. Массивы конечно зло, но другого способа хранить инфо по одному спеллу, не используя множество переменных - пока не умею.
Pingvinromeo, проблема в том что ты фигню творишь
если спел применён в точку то точка есть
перемещение это 1 действие
за это время точка не исчезнет
короче пруфы того что не работает
вариант еще проще
"Aasl (Аура замедления (торнадо))
Эта аура идеально подходит для добавления воину баффа, не имеющего никакого эффекта. Просто замените значения следующих полей в параметрах способности: “Данные – Фактор скорости перемещения” - “0.00” и “Характеристики – Разрешенные цели” - “Сам воин”. У способности нет иконки. Также Вы сможете добавлять боевой единице несколько способностей на основе ‘Aasl’, при этом различные иконки баффов будут сочетаться, а это, несомненно, плюс. Поскольку ‘Aasl’ является повреждающей аурой, то название баффа в игре всегда будет отображаться красным цветом, но Вы можете это изменить, используя в названии код цвета (поле “Текст – Подсказка” в параметрах баффа – прим. alexkill). Например, |cffff0000Повреждающий бафф|r или |cff00ff00Полезный бафф|r. Если же Вы когда-либо найдете предел для ‘Aasl’, то также сможете использовать другие ауры и затем скрывать их в неактивном спеллбуке."
Вопрос в том, что является целью способности. Если точка, то все должно работать. Если нет то нужно переделать на базе другой способности. Если целевая точка способности не ловится а событие ловится - изменение ландшафта будет в центре карты.
По событию "начинает применять способность" точка должна ловиться например на базе "Волны силы". Далее можно записать координаты и по завершению спелла создать изменения ландшафта в этой точке.
PS Действие вроде д.б. Окружение - Change Terrain type
В спелле на базе "Волны силы" точка ловится и по событию "приводит способность в действие"
Пример для 3 базовых спеллов
Хз. Вставил твой скрипт- все работает. Может быть у тебя сбилась переменная bj_lastCreatedMultiboard или она ссылается на другой мультиборд? Или у тебя индексы криво иницализированы (0-11), а GetConvertedPlayerId(p) возвращает 1-12. Или может у тебя событие кривое или оно вообще отсутсвует? Короче скинь целиком скрипт.
варианта без джасс не существует ибо там нужен GetLocalPlayer
готовому коду\наработке
это вопросы/ответы а не стол заказов
по поводу совета могу дать лишь 1
учи jass а ещё лучше сразу vjass и cjass
всеравно без них ничего не сделаешь нормального
а говна и так столько что оно никому не нужно
вот статьи
Sacar777, выведи после MultiboardGetItem(udg_JC_Board, i-1, 1)
на экран следующий текст
I2S(GetHandleId(q1))
I2S(GetHandleId(q2))
если q2 по каким то причинам не создаётся то это скажет об этом
стоп
а какой у тебя размер столбца стоит?
мб просто ячейка q1 перекрывает собой ячейку q2
и размер 10 это очень много
ведь в отличие от гуи тут размер в сотых указывается
то есть если в гуи размер 10 то тут должен быть 0.1
поставь в MultiboardSetItemWidth(q1, 10.00)
вместо 10.00 0.1 и проверь
если 0.1 не сработает то поставь 0.02
если и это не сработает то отпиши сюда
я тогда раскапаю свой старый мультибоард и сравню с твоим
для того чтобы избежать кучи неудобств связанных с обновлением мультибоарда(бегать по коду и искать где что изменяется) умные люди используют инкапсуляцию
darkowlom, ну я сабжом расставил нужные текстуры. Из всего что пора пришло в голову только использовать триггер "Окружение" и в нужных местах областями ставить текстуры. Но это как муторно.. Вот и решил спросить можно ли обойти ограничения.
Это делается функциями GetTerrainType и SetTerrainType.
Рисуешь на тех же самых текстурах определенную допустим квадратную локацию.
Затем for стартовоеX до конечноеX внутри for СтартовоеY до КонечноеY если getterraintype = точтонадозаменить то setterraintype на другую текстуру.
Других адекватных методов нет. Триггер который ты привел использует локации (точки), а значит - это возня с точками - возможно утечки.
Я используя эти функ целиком всю карту стираю размера 256x256 и отрисовываю 10к тайлов, в одном проекте). Лаг если и есть во время перерисовки - то незаметный, не больше 0.5сек
100% будет работать, если заменить стандартные текстуры деревьев, а в самих моделях вместо пути к текстуре указать соответствующий Replaceable ID. (Если порченные версии тоже заменить под новую модель, то ещё и порча будет корректно работать =)
nvc123, не, ну если реально хочешь знать, то слушай:
Суть скила в том, что герой использует скил и наносит урон, зависящий от его текущего урона. Скил активный. Т.е. в принципе можно сделать так, чтобы герой при активации способности получал приказ атаковать указанную цель и тогда полученный урон можно было бы отловить. Но тогда потом ещё придётся триггерно заставить его и скил применить, чтобы тот перезаряжался. В принципе это вполне реализуем0. Но всё-таки если бы можно было при помощи функции узнать урон, было бы гораздо притнее :)
У вайпера "Corrosive Skin" сделано на событии получения урона выше опред. порога (вроде выше 2.00).
Если охото чтобы именно дебафнуть в момент нанесения тычки, то тут нужно 2 триггера, 1 который следит (юнит атакован) и запускат таймер на скмжем 2 сек.
Второй триггер ждет что кто то (атакуемый или атакующий) сдохнет, время выйдет, атакующий отдаст приказ без указания цели, атакуемый получит урон.
Добавляя атакуемому скилл на основе рунных браслетов (-2.00 фактор резиста) и отсеиваем весь урон от заклинаний (ну наносим его юниту еще раз, но удалив браслеты и снизив хп) а если урон физический и источник урона на наз замахивался,последние 2 сек, + не успел отдать приказ без указания цели то его баффаем.
Если совсем лень, скачиваем систему отлова физического урона.
установить - min = 99999
выбрать все бочата в радиусе ....
если расстояние между позиция picked destr и позиция UNIT < min то
установить min - расстояние между ними
установить decor - выбранная декорация
Не лагает, а загружается дольше - это да, лаги в мультиплеере связаны не с картой а с говвеным пингом до хоста, из за задержек и постоянных дисконектов.
На днях пришлось ковыряться со звуками - и действительно, недостаточно просто прописать звуку нужный путь. Но и ничего особо сложного нет.
Нужно достать таблицу UI\SoundInfo\UnitAckSounds.slk из War3Patch.mpq. Там довольно просто отредактировать стандартные наборы звуков и, при необходимости, добавить новые.
На примере Малфуриона: есть несколько подряд идущих строк, в первых ячейках которых записано:
IGOREIK, там четыре события на применение способности.
Пробуй разные, выбери, какое подойдёт лучше.
Вариант 8gabriel8 лучше. Немного дополню. Можно найти модель спецэффекта, который применяется во время включения способности. Посмотреть редакторами моделей (War3ME, например), какой там звук используется. И прописать импортированному звуку этот путь.
События
Юнит приводит способность в действие
условие
Юнит применил способность "Пехотинец"
золото у владельца триггерного юнита больше или равно 10
действие
заменить юнита (триггерный юнит) на пехотинец,старая связка боевой единици
боже ну чего невидно
ресурсы это целое число,значит интежер(целочисленная)
нужно написать статью:учимся искать названия функций в гуи
вопрос закрыть незабудь
и вобще статьи прочитай
Да, время возвращения охраны (сек) - через 5 секунд после начала преследования противника юниты возвращаются назад. Расстояние охраны - расстояние, которое они могут отойти от своей точки во время погони. Т.е. монстры возвращаются либо через 5 секунд, либо через 600 "метров", дальше они не побегут.
ИИ стандартный, полагаю? Стандартному ИИ вроде как вижн не важен, он и так знает где все находятся, если мне не изменяет память. Как от него не прячься, найдет сразу. Если уж очень хочется - давать юнитов нейтралам и делать их союзным всем ботам. (игроков 16, если не изменяет память). Или давать союзным игрокам, при наличии. По крайней мере не будут мчаться в след за армией. Однако вполне могут быть более качественные решения проблемы, я стандартный ИИ не изучал, не могу быть уверен в офигительности предложенного решения. :)
Я знаю что это координаты умник.. пустые придирки не прокатят
я не только про координаты, я про всё
короче судя по всему ты пытаешься написать прогу которая бы думала вместо тебя
и это очень пичально
поэтому я просто оставлю это здесь
Не boolean а booexpr - это фильтр для группы, там никакие локалка не нужны.
Саму группу можно перебирать в цикле что правда дает шанс попасть в лимит операций и грохнуть поток.
Делать нужно примерно вот так :
function OnlyEnemyGroundAlive takes nothing returns boolean
return GetUnitState( GetFilterUnit(), UNIT_STATE_LIFE )> 0.405 and IsUnitEnemy( GetFilterUnit(), bj_groupEnumOwningPlayer ) and IsUnitType( GetFilterUnit(), UNIT_TYPE_GROUND )
endfunction
function DamageEnemy takes nothing returns nothing
call UnitDamageTarget( bj_lastReplacedUnit, GetEnumUnit(), 100.00, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_COLD, WEAPON_TYPE_WHOKNOWS )
endfunction
function Temp takes nothing returns nothing
local group grp = CreateGroup( ) //создаём группу юнитов
local real dx = 0.00 // координата x
local real dy = 0.00 // координата y
set bj_groupEnumOwningPlayer == Player(0) // глобальная переменная чтобы передать данные в фильтр
call GroupEnumUnitsInRange( grp, dx, dy, 512.00, Condition( function OnlyEnemyGroundAlive) )
set bj_lastReplacedUnit = GetTriggerUnit( )// глобальная переменная чтобы передать данные в другую функцию.
call ForGroup( grp, function DamageEnemy )
call DestroyGroup( grp )
set grp = null
endfunction
Высота и скорость набора высоты в секунду. Не работает на наземных, чтобы заработало на нелетающих им нужно вручить и сразу же удалить способность 'Amrf' (Превратится в ворона). Хоспади в оглавлении статей все это есть, откуда вы на нашу голову рухнули?
Можно запоминать все деформации и потом вызывать их заново, но с отрицательной амплитудой чтобы они гасили предыдущие.
С одной вроде работает, но надо будет заносить их в массивы и т.д.
Diazon, можно даже проще сделать.
Создать способность на базе, к примеру, повышения защиты для предмета. Сделать +0 брони.
В триггере сделать так: Событие : юнит атакован Условие : на юните висит чума Действие : проверить, если нет способности +0 брони, то дать эту способность
И при смерти проверять имеет ли этот юнит способность +0 брони. Если да- то забрать её и создать труп.
gabriel_fisher, скорее всего, тебе нужны анимационные теги
теги бывают разные: alternate, gold, lumber, defend, flesh и др
например, у рабочего есть анимации attack, walk, death и если ему добавить тег lumber, тогда вместо этих анимаций будут проигрываться attack lumber, walk lumber и death lumber соответственно.
Suite, вот только придётся каждый раз вручную юзать этот спелл SсRealm, ты вопрос прочти прежде чем писать всякий бред
нормальным способом момент добычи отловить нельзя
недавно кидали костыль позволяющий отловить удар по дереву но он тут не особо поможет
ибо анимации будут перебивать друг друга
в общем как и сказал Suite меняй это в самой модели
Obelick, эта либо не трогает мультибоарды
она по точкам(location) в основном работает Obelick:
учить ради них джас и переписывать мне настолько лень
если ты нормально знаешь гуи и имеешь базовые знания по использованию гугл переводчика то переписать мультибоард на jass много времени не займёт
кроме того тебе не обязательно переписывать полностью
можно сконвертировать в код и поправить то что вызывает утечки
если ты говоришь об утечках в функции установки значения ячейки мультибоарда то их можно убрать следующим кодом
вставь его в шапку карты (туда где ты ALL.j подключал)
правда после этого автозаполнение строк/столбцов перестанет работать и придётся делать его циклом
еще раз - лучше скачать handle counter и посмотреть его показания, сколько объектов создается при касте
стремление сделать все безутечно похвально, но все хорошо в меру
Очень странный вопрос, мб запустить? При открытии карты в редакторе вы никаких роликов не увидите.
А так что вам мешает начинать ролик при старте? Событие инициализация или время прошло 0.00 сек. Как делать ролики смотрите в дефолтных картах близзардов.
во первых: не надо дублировать вопросы
во вторых: у меня твоя карта открывается
правда я не настолько сумасшедший чтобы юзать вин10
в третьих: размер мапы большой и может тупо не хватать памяти (особенно если юзаешь вин10)
советую попробовать переустановить jngp
если не поможет то сменить винду
» WarCraft 3 / Угол декорации
» WarCraft 3 / Триггерные заклинания
» WarCraft 3 / multiboard
» WarCraft 3 / Количество текстур
» WarCraft 3 / Герой который не атакует
» WarCraft 3 / Не работает модель
» WarCraft 3 / Вопросы по декорациям
» WarCraft 3 / Лаги.
» WarCraft 3 / Звук
» WarCraft 3 / Владелец юнита
» WarCraft 3 / Проблема с моделью
» WarCraft 3 / Ошибка в коде
» WarCraft 3 / Переменные, утечки, стабильность
» WarCraft 3 / Конвертация равкодов
» WarCraft 3 / Высота
» WarCraft 3 / Ядовитое облако
» WarCraft 3 / заставить рабочего строить здание
» WarCraft 3 / Анимация юнита
» WarCraft 3 / звук и утечка
» WarCraft 3 / Открытие карт
» WarCraft 3 / Не открывается карта
» WarCraft 3 / Радиус постройки